// File: jmcomic-core/src/main/java/dev/jukomu/jmcomic/client/JmImageResp.java
package dev.jukomu.jmcomic.client;

import dev.jukomu.common.util.file.FileUtils;
import dev.jukomu.jmcomic.util.JmImageUtils;
import okhttp3.Response;

import java.io.IOException;

/**
 * 对应Python的JmImageResp，用于处理禁漫图片响应。
 */
public class JmImageResp extends JmResp {

    /**
     * 构造函数。
     *
     * @param rawResponse 原始OkHttp响应对象。
     */
    public JmImageResp(Response rawResponse) {
        super(rawResponse);
    }

    @Override
    public String getErrorMessage() {
        StringBuilder msg = new StringBuilder("禁漫图片获取失败: [").append(getUrl()).append("]");
        if (getHttpCode() != 200) {
            msg.append("，http状态码=").append(getHttpCode());
        }
        if (getContent().length == 0) {
            msg.append("，响应数据为空");
        }
        return msg.toString();
    }

    /**
     * 将图片响应内容保存到文件，并根据需要解密。
     * 对应Python的transfer_to方法。
     *
     * @param path        图片保存路径。
     * @param scrambleId  图片所属章节的解密ID。
     * @param decodeImage 是否需要解密图片。
     * @param imgUrl      图片原始URL，用于计算分割数。
     * @throws IOException 如果保存或解密失败。
     */
    public void transferTo(String path, String scrambleId, boolean decodeImage, String imgUrl) throws IOException {
        String urlForNum = (imgUrl != null) ? imgUrl : getUrl();
        int queryIndex = urlForNum.indexOf("?");
        if (queryIndex != -1) {
            urlForNum = urlForNum.substring(0, queryIndex);
        }

        if (!decodeImage || scrambleId == null) {
            // 不解密图片，直接保存文件
            JmImageUtils.saveRespImg(this, path, FileUtils.suffixNotEqual(urlForNum, path));
        } else {
            // 解密图片并保存文件
            JmImageUtils.decodeAndSave(
                    JmImageUtils.getNumByUrl(scrambleId, urlForNum),
                    JmImageUtils.openImage(getContent()),
                    path
            );
        }
    }
}